<指令名稱> <目的暫存器> <操作數>
add x5, x6, x7
表示將 x6 和 x7 中的值相加,結果儲存在 x5 中。add x5, x6, x7
,但這並非必須。#
開頭,#
後面的內容會被忽略,類似於 Python 的註解語法。介紹了 RISC-V 中整數的加法和減法指令,並將其與 C 語言中的運算做比較:
add x1, x2, x3
x2
和 x3
中的值相加,結果存入 x1
中。a = b + c
a
對應 x1
,b
對應 x2
,c
對應 x3
。sub x3, x4, x5
x4
中的值減去 x5
中的值,結果存入 x3
中。d = e - f
d
對應 x3
,e
對應 x4
,f
對應 x5
。a = b + c + d - e;
,需要將其分解為多個 RISC-V 指令來實現:
add x10, x1, x2 # 將 b + c 存入 x10
add x10, x10, x3 # 將之前的結果加上 d
sub x10, x10, x4 # 最後將結果減去 e
#
符號,註解部分用於說明該指令的作用。(g + h) - (i + j)
,會使用臨時暫存器來保存中間結果:
add x5, x20, x21 # g + h 存入 x5
add x6, x22, x23 # i + j 存入 x6
sub x19, x5, x6 # (g + h) - (i + j) 存入 x19
mv x5, x6
表示將 x6
的值設置到 x5
中。add x5, x6, x0
,這條指令將 x6
的值與 x0
(恆為 0)相加,並存入 x5
。介紹了 RISC-V 中的 Immediates 的概念和使用方法:
addi x3, x4, 10
(在 RISC-V 中)f = g + 10
x3
和 x4
對應到 C 中的變數 f
和 g
。addi ..., -X
等效於 subi ..., X
,所以不需要額外的 subi 指令。addi x3, x4, -10
(在 RISC-V 中)f = g - 10
x3
和 x4
仍然對應到 C 中的變數 f
和 g
。x0
)x0
硬體化為固定值 0。x0
register 的硬體定義:
x0
永遠是 0,因此任何寫入 x0
的操作都會被忽略。add x3, x4, x0
將 x4
的值加上 0 並存入 x3
,這等效於 C 語言中的 f = g
,其中 f
對應於 x3
,g
對應於 x4
。x0
硬體上固定為 0,像 add x0, x3, x4
這樣的指令將不會執行任何有效操作,因為結果永遠是寫入 x0
,而 x0
不會改變。